var http = require('http'),
    fs = require('fs'),
    ch = require("./Chat"),
    u = require("./Usuario");
  
var chat = new ch.Chat();


var server = http.createServer(function (request, response) {
  var nome = request.url.substring(1);
  if (nome == '') {
  response.writeHead(404);
    return response.end('Pagina nao existe!');
  }
  fs.readFile(__dirname + '/index.html',
  function (err, data) {
    if (err) {
      response.writeHead(500);
      return response.end('Erro ao carregar index.html');
    }
    if(!chat.verificarUsuario(nome)){
      data = data.toString().replace('{{usuario}}', nome);
      response.writeHead(200);
      response.end(data);
    }else{
      response.writeHead(200);
      response.end("<h1>Esse usuario ja existe tente outro nome</h1>");
    }
    
  });
}).listen(1337,'192.168.1.2');
//10.201.20.4 - ip trabalho

//comunicacao com aplicacao
var io = require('socket.io').listen(server);
io.sockets.on('connection', function (socket) {
  
  var msg = []; 
  var lengthMsgs = msg.length;

  //registrando usuario
  socket.on('registro', function (novoUsuario) {
    if(!chat.verificarUsuario(novoUsuario.nome)){
      var usuario = new u.Usuario();
      usuario.nome = novoUsuario.nome;
      usuario.bkgColor = chat.getRandomColor();
      usuario.dataAcesso = new Date().getTime();
      chat.incluirUsuario(usuario);
      //socket.send('usuario registrado: '+usuario.nome);
      //ultimas conversas
      socket.emit("last_chats",chat.last10Minutes());
      //retornando usuario registrado
      socket.emit("usuario",usuario);
      //avisando para a sala o novo usuario
      socket.broadcast.emit("newUsuario",usuario);
    }
  });

  //excluindo usuario
  socket.on("excluirUsuario", function(nome){
      var usuario = new u.Usuario();
      usuario.nome = nome;
      chat.excluirUsuario(usuario);
      socket.broadcast.emit("usuarioExlcuido",usuario);
  });

  
  
  //registrando mensagem
  socket.on('mensagem', function(mensagem){
    for (var i = 0; i < chat.usuarios.length ; i++) {
      if(chat.usuarios[i].nome == mensagem.usuario){
        //setando cor aleatoria do usuario
        mensagem.userColor = chat.usuarios[i].bkgColor;
        //mansagens conrrentes
        msg.push(mensagem);
        //historica das mensagens
        chat.incluirMsg(mensagem);
        //historico por usuario
        chat.usuarios[i].inserirMensagem(mensagem);
      }
    };
  });

  //imprimir mensagens
  setInterval(function(){
    if(msg.length > lengthMsgs){
      socket.broadcast.emit("printMensagem",msg[msg.length - 1]);
      lengthMsgs = msg.length;
    }
  },2000);

  //observando usuario que estao online e offline
  setInterval(function(){
    io.sockets.emit("usuariosOnline",chat.usuarios);
  },1000);
  
});

//criado metodo na classe array para excluir usuario do array
Array.prototype.remove = function(from, to) {
  var rest = this.slice((to || from) + 1 || this.length);
  this.length = from < 0 ? this.length + from : from;
  return this.push.apply(this, rest);
};








